import java.math.BigInteger;

public class cuttingRope {
    public int _cuttingRope(int n) {
        if (n == 1)
            return 1;
        if (n == 2)
            return 1;
        if (n == 3)
            return 2;

        // 定义容器
        BigInteger[] dp = new BigInteger[n + 1];
        for (int i = 0; i < n + 1; i++) {
            dp[i] = BigInteger.valueOf(1);
        }
        // 容器初始化
        dp[2] = BigInteger.valueOf(2);
        dp[3] = BigInteger.valueOf(3);
        // 状态转移
        for (int i = 4; i <= n; i++) {
            int maxValue = 0;
            for (int j = 1; j <= i / 2; j++) {
                dp[i] = dp[i].max(dp[j], dp[j].multiply(dp[i - j]));
            }
            dp[i] = maxValue;
        }

        return dp[n].mod(BigInteger.ValueOf(1000000007)).intValue();
    }
}
